migration
emmm, 这题的做法跟前面的一道题差不多, 都可以泄露libc地址,进行栈迁移, 然后执行system函数来getshell, 差不多的思路就不重复写了
crack
除了pie和改写重定位表以外的保护都开了
程序逻辑为从urandom文件中读取4个字节作为password, 由于urandom这个文件的内容是随机的, 所以password不可控, 但是后面有个格式化字符串漏洞,
并且参数在栈上, 那么可以利用”%10$s” 泄露出password, 之后就可以cat flag了
1 | 1 #!/usr/bin/python2 |
cat flag:
craxme
开了NX和CANARY
又是一个格式化控制字符串漏洞的题目, 不过这次不是要我们泄露数据, 而是向内存中写入数据
一个为218
一个为0xfaceb00c(-87117812)
第一个好解决, 第二个需要分段写入, %hn往内存中写入两个字节
1 | 1 #!/usr/bin/python2 |
cat flag:
playfmt
= = 格式化字符串漏洞三连…
只开了NX
这题printf的参数不在栈上在bss段, 但是可以无限次利用这个漏洞, 所以思路还是有得, 不过比较麻烦, 覆写got表需要在一次printf调用中完成,这就使得需要很多准备工作
1.利用 序号1 处得两个方框内栈的地址之间的指向关系, 将地址0xff849628 的内容改成strncmp 的got表地址
2.再利用 序号2 处的方框内的的栈的地址之间的指向关系, 将地址0xff8496e4 的内容改成strncmp的got表地址+2
3.之后就是向strncmp_got内写入system的低两个字节, strncmp_got+2内写入system的高两个字节, 这样就可以成功覆盖strncmp的got表内容为system
4.最后就是输入buf为/bin/sh 就可以getshell了
1 | 1 #!/usr/bin/python2 |
getshell
hacknote
开了NX和CANARY
是个堆类型的题目, 在del_note中存在UAF漏洞, 限制的chunk的个数最多为5, 第一时间想到两种利用方式, 1.控制程序中的print_note函数中的函数指针
2.进行常规的fastbin attack, 不过限制了chunk的大小, 而且感觉第一种更方便, 所以就用第一种了
利用思路:
在print_note中调用的函数指针, 只要控制了函数指针指向system函数就可以达到getshell的目的, 具体步骤
1.创建一个大小大于fastbin大小的chunk, 随后free掉, 在分配一个大小不大于这个chunk的chunk, 随后利用print_note函数泄露libc地址
2.这个程序的chunk结构
chunk 的 data区
data -> &print_note_content
data+4 -> 输入的数据
data+… -> 输入的数据或0
由于箭头指向的malloc是程序中分配的,不可控, 所以需要利用UAF漏洞重用这段chunk来让data -> system
3.释放两个chunk, 在malloc(8)输入数据为p32(system) + “||sh\0” 即可达成目的
由于题目也准备好了后门, 直接让data-> &magic也行
1 | 1 #!/usr/bin/python2 |
getshell
- Post link: http://wafuter.jxustctf.top/2020/01/07/HITCONING-training-6-10-writeup/
- Copyright Notice: All articles in this blog are licensed under unless stating additionally.



若没有本文 Issue,您可以使用 Comment 模版新建。
GitHub Issues